package services.common;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import models.common.entity.t_column;
import play.cache.Cache;
import services.base.BaseService;

import common.interfaces.ICacheable;
import common.utils.Factory;
import common.utils.PageBean;

import daos.common.ColumnDao;

/**
 * 前台栏目设置的service的具体实现
 *
 * @description 
 *
 * @author DaiZhengmiao
 * @createDate 2015年12月29日
 */
public class ColumnService extends BaseService<t_column> implements ICacheable {

	protected ColumnDao columnDao = null;
	
	protected ColumnService() {
		this.columnDao = Factory.getDao(ColumnDao.class);
		
		super.basedao = columnDao;
		
	}
	
	/**
	 * 根据键名取得前台栏目的实体
	 *
	 * @param key 前台栏目的key
	 * @return
	 *
	 * @author DaiZhengmiao
	 * @createDate 2015年12月30日
	 */
	public t_column findColumnByKey(String key) {
		Map<String, t_column> columnMap = getCache();
		if (columnMap == null || columnMap.size() == 0 ||columnMap.keySet() == null || columnMap.keySet().size() == 0) {
			
			return null;
		}
		
		return columnMap.get(key);
	}

	/**
	 * 根据键名取得前台栏目的名称(返回的是name， 不是back_name)
	 *
	 * @param key 前台栏目的key
	 * @return 
	 *
	 * @author DaiZhengmiao
	 * @createDate 2015年12月30日
	 */
	public String findColumnNameByKey(String key) {
		t_column column = findColumnByKey(key);
		if (column == null) {
			
			return null;
		}
		
		return column.name;
	}
	

	/**
	 * 根据键名取得前台栏目的名称(返回的是name， 不是back_name)
	 *
	 * @param key 前台栏目的key
	 * @return 
	 *
	 * @author DaiZhengmiao
	 * @createDate 2016年1月29日
	 */
	public String findColumnBackNameByKey(String key) {
		t_column column = findColumnByKey(key);
		if (column == null) {
			
			return null;
		}
		
		return column.back_name;
	}
	
	/**
	 * 查询所有的前台栏目，以map的形式返回
	 *
	 * @return
	 *
	 * @author DaiZhengmiao
	 * @createDate 2015年12月29日
	 */
	public Map<String, String> queryAllColumsMap() {
		Map<String, t_column> map = queryAllColumns();
		if (map == null || map.keySet() == null || map.keySet().size() == 0) {
			
			return null;
		}
		
		Map<String, String> columnMap = new HashMap<String, String>();
		for (String key : map.keySet()) {
			columnMap.put(key, map.get(key).name);
		}

		return columnMap;
	}

	/**
	 * 查询出所有的栏目以键值对的形式返回
	 *
	 * @return key:栏目标识(具体见ColumnKey类)，value:栏目信息
	 *
	 * @author DaiZhengmiao
	 * @createDate 2016年1月8日
	 */
	public Map<String, t_column> queryAllColumns() {
		return getCache();
	}
	
	/**
	 * 更新键名为 column_key的栏目名称为columnName
	 *
	 * @param column_key 前台栏目的key
	 * @param columnName 更新后前台栏目的名称
	 * @return
	 *
	 * @author DaiZhengmiao
	 * @createDate 2015年12月30日
	 */
	public boolean updateColumnName(String column_key, String columnName) {
		t_column column = columnDao.findByColumn("column_key = ?", column_key);
		if (column == null) {

			return false;
		}
		
		column.name = columnName;
		boolean isUpdated = columnDao.save(column);
		if (!isUpdated) {
			return false;
		}
		
		addAFlushCache();
		
		return true;
	}

	@Override
	public void addAFlushCache() {
		Map<String, t_column> columnMap = null;
		
		List<t_column> columns = columnDao.findAll();
		if (columns != null && columns.size() > 0) {
			columnMap = new HashMap<String, t_column>();
			for (t_column column : columns) {
				columnMap.put(column.column_key, column);
			}
		}
		
		Cache.safeSet(this.getClass().getName(),columnMap, null);
	}

	@Override
	public Map<String, t_column> getCache() {
		Map<String, t_column> columnMap = (Map<String, t_column>) Cache.get(this.getClass().getName());
		if (columnMap == null || columnMap.keySet() == null || columnMap.keySet().size() == 0) {
			addAFlushCache();
			
			columnMap = (Map<String, t_column>) Cache.get(this.getClass().getName());
		}

		return columnMap;
	}

	@Override
	public void clearCache() {
		Cache.safeDelete(this.getClass().getName());
	}	
	
	/***
	 * 根据栏目标识查找数据
	 * @param home_our
	 * @return
	 */
	public List<t_column> findListBy(String home_our) {
		t_column column=findColumnByKey(home_our);
		if(column==null){
			 return null;
		}
		Long id=column.id;
		return findListByColumn("father_id =? order by compositor asc",id);
	}
	
	/**
	 * 一级栏目上下架
	 * @param id
	 * @param column
	 * @return
	 */
	public boolean isUseInformation(Long id, boolean is_show) {
		int ok=columnDao.isUseInformation(id,is_show);
		if (ok==1){
			addAFlushCache();
			return true;
		}
		return false;
	}

	/**
	 * 	查找栏目列表
	 * @param id 根据父级ID
	 * @return
	 */
	public List<t_column> findColumnList(Long id) {
		return columnDao.findConlumnList(id);
	}
	
	/**
	 * 前台栏目显示单篇的数据
	 * @param currPage 当前页
	 * @param pageSize 每页条数
	 *  @param id
	 * @return
	 */
	public PageBean<t_column> pageOfColumnBack(int currPage, int pageSize, Long id) {
		return columnDao.pageOfColumnBack(currPage,pageSize,id);
	}
	
	/***
	 *查看最新的服务协议和法律声明
	 * @return
	 *  @author liudong
	 * @param serveLaw 
	 * @createDate 2015年12月29日
	 */
	public t_column findreRegisterDeal(String serveLaw) {
		//t_column column=columnDao.findByColumn("column_key=? and is_show=1  order by time desc", serveLaw);
		t_column column=findColumnByKey(serveLaw);
		return column;
	}
	
	/**
	 * 根据ID查找一级栏目  app
	 * @param id
	 * @return
	 * @author binghui.zhou
	 * @createDate 2017年8月3日
	 */
	public List<Map<String, Object>> queryColumnList(Long id) {
		return columnDao.queryColumnList(id);
	}
	
	/**
	 * 查找单篇文章 app
	 * @param currPage
	 * @param pageSize
	 * @param colId
	 * @return
	 * @author binghui.zhou
	 * @createDate 2017年8月3日
	 */
	public PageBean<Map<String, Object>> pageAppOfColumnBack(int currPage, int pageSize, long colId) {
		
		return columnDao.pageAppOfColumnBack(currPage,pageSize,colId);
	}

	/**
	 *	后台-运维-协议管理-修改协议内容
	 * @param column
	 * @param id
	 * @return
	 * @author Liangqiongfeng
	 *@version 2018-3-5 
	 */
	public int toSave(t_column column, Long id) {
		
		int count = columnDao.toSaveById(column,id);
		
		if(count < 0){
			return count;
		}
		addAFlushCache();
		return count;
	}

	
	
	
}
